﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using VemTransporte.Models.Fachada;
using VemTransporte.Models.Basica;
using VemTransporte.Models.Factory;
using System.Globalization;

namespace VemTransporte.Views.UsuarioEmpresa
{
    public partial class CadastroHorario : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Empresa emp = (Empresa)Session["EmpresaLogada"];

            if (emp != null)
            {
                ImageEmpresaLogoTipo.ImageUrl = string.Format("/EmpresaLogos/{0}.jpg", emp.Id);
                if (emp.TipoAcesso.Equals("ADMEMPRESA"))
                {
                    liMenuEmpresaCadastro.Visible = true;
                    liMenuCadastroInicialEmpresa.Visible = false;
                    liMenuAlterarEndEmpresa.Visible = true;
                    liMenuCadastrarTelefones.Visible = true;
                    liMenuAlterarSenhaEmpresa.Visible = true;
                    liMenuAlterarLinhaEmpresa.Visible = false;
                    liMenuCadastroParadaEmpresa.Visible = false;
                    liMenuHoraLinhaEmpresa.Visible = false;
                    liMenuEmpresaVeiculo.Visible = true;
                }
                else if (emp.TipoAcesso.Equals("ADMTRANSPORTEPUBLICO"))
                {
                    liMenuEmpresaCadastro.Visible = false;
                    liMenuCadastroInicialEmpresa.Visible = false;
                    liMenuAlterarEndEmpresa.Visible = false;
                    liMenuCadastrarTelefones.Visible = false;
                    liMenuAlterarSenhaEmpresa.Visible = false;
                    liMenuAlterarLinhaEmpresa.Visible = true;
                    liMenuCadastroParadaEmpresa.Visible = true;
                    liMenuHoraLinhaEmpresa.Visible = true;
                    liMenuEmpresaVeiculo.Visible = false;
                }
                else
                {

                }

                if (emp.NomeFantasia.IndexOf(" ") > 0)
                {
                    LabelNomeEmpresa.Text = emp.NomeFantasia.Substring(0, emp.NomeFantasia.IndexOf(" "));
                }
                else
                {
                    LabelNomeEmpresa.Text = emp.NomeFantasia;
                }
            }

            if (emp == null)
            {
                Response.Redirect("LoginEmpresa.aspx");
            }

            if (!IsPostBack)
            {
                if (Fachada.Instance.LinhaAtual != null)
                {
                    GridViewHorario.DataSource = Fachada.Instance.LinhaAtual.Horarios;
                    GridViewHorario.DataBind();
                }
            }

        }

        protected void ButtonProcurarLinha_Click(object sender, EventArgs e)
        {
            try
            {
                ErrorMessage.Text = "";
                Linha l = Fachada.Instance.ProcurarLinhaPorNumero(TextBoxNumeroLinha.Text);

                if (l != null)
                {
                    Fachada.Instance.LinhaAtual = l;
                    LabelNomeLinha.Text = l.Nome;
                    GridViewHorario.DataSource = l.Horarios;
                    GridViewHorario.DataBind();
                }
                else
                {
                    ScriptManager.RegisterStartupScript(UpdatePanelLinha, typeof(Page), "MSG", "javascript:alert('Linha não encontrada!');", true);
                    TextBoxNumeroLinha.Focus();
                }
            }
            catch (Exception ex)
            {
                ErrorMessage.Text = ex.Message;                
            }
        }

        protected void ButtonSalvarHorario_Click(object sender, EventArgs e)
        {
            try
            {
                ErrorMessage.Text = "";

                if (Fachada.Instance.Horario != null)
                {
                    Fachada.Instance.Horario.HoraSaida = Convert.ToDateTime(TextBoxHoraSaida.Text);
                    Fachada.Instance.Horario.HoraChegada = Convert.ToDateTime(TextBoxHoraChegada.Text);

                    Fachada.Instance.Salvar(Fachada.Instance.Horario);

                    Fachada.Instance.HorarioAlterar = null;

                    ButtonSalvarHorario.Text = "Cadastrar";

                    ScriptManager.RegisterStartupScript(UpdatePanelHorario, typeof(Page), "MSG", "javascript:alert('Alterado com sucesso!');", true);
                }
                else
                {
                    if (Fachada.Instance.LinhaAtual != null)
                    {
                        Horario hor = HorarioFactory.Instance.CreateHorario();

                        if (Fachada.Instance.LinhaAtual.Horarios == null)
                        {
                            Fachada.Instance.LinhaAtual.Horarios = new List<Horario>();
                        }

                        hor.HoraSaida = Convert.ToDateTime(TextBoxHoraSaida.Text);
                        hor.HoraChegada = Convert.ToDateTime(TextBoxHoraChegada.Text);

                        Fachada.Instance.LinhaAtual.AddHorario(hor);

                        Fachada.Instance.Salvar(hor);

                        ScriptManager.RegisterStartupScript(UpdatePanelHorario, typeof(Page), "MSG", "javascript:alert('Cadastro efetuado com sucesso!');", true);

                        ErrorMessage.Text = "";
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(UpdatePanelHorario, typeof(Page), "MSG", "javascript:alert('Digite o número da linha!');", true);

                        TextBoxNumeroLinha.Focus();
                    }
                }

                TextBoxNumeroLinha.Text = "";
                TextBoxHoraSaida.Text = "";
                TextBoxHoraChegada.Text = "";

                GridViewHorario.DataSource = Fachada.Instance.LinhaAtual.Horarios;
                GridViewHorario.DataBind();
            }
            catch (Exception ex)
            {
                ErrorMessage.Text = ex.Message;
            }
        }

        protected void GridViewHorario_RowEditing(object sender, GridViewEditEventArgs e)
        {
            try
            {
                ErrorMessage.Text = "";

                Fachada.Instance.HorarioAlterar = Fachada.Instance.LinhaAtual.Horarios[e.NewEditIndex];

                TextBoxHoraSaida.Text = String.Format("{0:hh:mm:ss}", Fachada.Instance.HorarioAlterar.HoraSaida);

                TextBoxHoraChegada.Text = String.Format("{0:hh:mm:ss}", Fachada.Instance.HorarioAlterar.HoraChegada);

                TextBoxHoraSaida.Focus();

                ButtonSalvarHorario.Text = "Alterar";

                e.Cancel = true;
            }
            catch (Exception ex)
            {
                ErrorMessage.Text = ex.Message;
            }

        }

        protected void GridViewHorario_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                string id = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "Id"));
                ((ImageButton)e.Row.FindControl("ImageButtonExcluir")).Attributes.Add("onClick",
                       " return confirm('Confirma o cancelamento do horario?');");

                ((ImageButton)e.Row.FindControl("ImageButtonExcluir")).CommandArgument = id;
            }
        }

        protected void GridViewHorario_RowCommand(object sender, GridViewCommandEventArgs e)
        {

            if (e.CommandName == "excluir")
            {
                try 
                {

                    string idHorario = e.CommandArgument.ToString();

                    foreach (Horario hor in Fachada.Instance.LinhaAtual.Horarios.ToList())
                    {
                        if (hor.Id == int.Parse(idHorario))
                        {
                            Fachada.Instance.LinhaAtual.Horarios.Remove(hor);

                            Fachada.Instance.Remover(hor);

                            break;
                        }                    
                    }

                    GridViewHorario.DataSource = Fachada.Instance.LinhaAtual.Horarios;
                    GridViewHorario.DataBind();

                    ScriptManager.RegisterStartupScript(UpdatePanelHorario, typeof(Page), "MSG", "javascript:alert('Excluído com sucesso!');", true);
                }
                catch (Exception ex)
                {
                    ErrorMessage.Text = ex.Message;
                }
           }
        }

        protected void GridViewHorario_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {

            try
            {
                this.GridViewHorario.PageIndex = e.NewPageIndex;

                GridViewHorario.DataSource = Fachada.Instance.LinhaAtual.Horarios;
                GridViewHorario.DataBind();
            }
            catch (Exception ex)
            {
                ErrorMessage.Text = ex.Message;            
            }

        }

        protected void GridViewHorario_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            e.Cancel = true;
        }  

    }
}